package com.kj.tms.common.bean.redis;

import java.util.List;
import java.util.Map;

/**
 * @ProjectName: tms
 * @Package: com.hongtu.tms.common.util.redis
 * @Description: redis接口类
 * @Author: [wzl]
 * @CreateDate: 2017/11/17 16:16
 */
public interface RedisAccess {

    /**
     * 带有超时时间的string设置
     * @param redisKey
     * @param seconds
     */
    void expire(String redisKey, long seconds);

    /**
     * 删除指定 key
     * @param redisKey
     */
    void delete(String redisKey);
    //针对字符串的操作 - start

    /**
     * 设置string key value 超时时间
     * @param redisKey
     * @param object
     * @param seconds
     */
    void set(String redisKey, Object object, long seconds);

    /**
     * 设置设置string key value
     * @param redisKey
     * @param object
     */
    void set(String redisKey, Object object);

    /**
     * 根据key获取value
     * @param redisKey
     * @param <T>
     * @return
     */
    <T> T get(String redisKey);
    //针对字符串的操作 - end
    //针对hash的操作 - start

    /**
     * 设置hash key value
     * @param redisKey
     * @param filedKey
     * @param object
     * @param seconds
     */
    void hset(String redisKey, String filedKey, Object object, long seconds);

    /**
     * 获取 指定key的hash
     * @param redisKey
     * @param filedKey
     * @param <T>
     * @return
     */
    <T> T hget(String redisKey, String filedKey);
    /**
    * @Method      hgetValue
    * @Description 获取key对应得value值
    * @Author      [yangruidong]
    * @Version     1.0
    * @Param       
    * @Return      
    * @Exception   
    * @Date        2018/1/8 16:01
    */
    public String  hgetValue(String redisKey, String hashKey);
    /**
     * 设置全部
     * @param redisKey
     * @param map
     * @param seconds
     */
    void hsetAll(String redisKey, Map<String, Object> map, long seconds);

    /**
     * 获取全部
     * @param redisKey
     * @return
     */
    Object hgetAll(String redisKey);

    /**
     * 不超时设置
     * @param redisKey
     * @param object
     */
    void setNoExpire(String redisKey, Object object);

    /**
     * 删除指定keyfield
     * @param redisKey
     * @param hashKey
     */
    void hdelete(String redisKey, String hashKey);

    /**
     * 删除全部
     * @param redisKey
     */
    void hdeleteAll(String redisKey);
    //针对hash的操作 - end

    //针对list的操作 - start

    /**
     * 插入list
     * @param redisKey
     * @param seconds
     * @param obj
     * @return
     */
    Long lpush(String redisKey, long seconds, Object... obj);

    /**
     * 设置值
     * @param key
     * @param index
     * @param value
     */
    void lset(String key, long index, Object value);

    /**
     * 移除指定value
     * @param key
     * @param index
     * @param value
     */
    void lremove(String key, long index, Object value);

    /**
     * 获取指定范围的list
     * @param key
     * @param start
     * @param stop
     * @param <T>
     * @return
     */
    <T> List<T> lrandge(String key, long start, long stop);
    //针对list的操作 - end

}